package com.shujia

import scala.beans.BeanProperty

object Code12Class {
  def main(args: Array[String]): Unit = {
    /**
     * ① 类的关键字为 class
     * ② 类的名称首字母需要大写
     * ③ 对于类class前面可以添加对应的修饰符 如果不加表示public 其他和Java一致
     * ④ 对于定义的每个class类在编译时，都会单独生成一个 .class文件
     * ⑤ Scala在定义类时，给定自定义成员变量在编译时，实际上是将其转换成同名的函数
     * ⑥ @BeanProperty 可以给当前类添加get Set函数
     * ⑦ class的构造方法，可以直接在类名旁边定义
     * ⑧ class 类名旁边定义的构造方法为主构造方法 其他的构造方法 可以通过this进行相互调用
     * ⑨ 对于非主构造函数必须在第一行调用主构造函数，或者调用其他非主构造函数
     */

    val user: User = new User()
    println(user.name)
    println(user.address)
    println(user.company)

    val person = new Person()
    person.age = 18
    println(person.age)

    //    person = new Person()  val 修饰的变量不能再修改，但是其中的属性可以再修改


    val stu = new Stu("张三", 18)
    println(stu.name)

    val stu1: Stu = new Stu("李四")
    println(stu1.name)
    println(stu1.age)

    val stu2 = new Stu()
    println(stu2.name)
    println(stu2.age)

    val stu3 = new Stu2("王五")
    println(stu3.name)



  }
}


class User {
  var name: String = "张三"
  var address: String = _
  val company: String = "数加科技" // val表示为一个常量 必须在定义时给定默认值
}

class Person {
  @BeanProperty var age: Int = _ // 对于 _ 作为占位符 前面的类型必须要添加
  var weight = 100
}


class Stu(_name: String, _age: Int) {
  var name = _name
  var age = _age

  // 一个参数的构造方法

  def this(_name: String) {
    this(_name, 18)
  }

  def this() {
    this("学生")
  }

}

class Stu2(_name:String) {
  var name:String = _

  def this(){
    this("赵六")
//    this.name = _name
//    name = _name

  }
}